package ejb;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import entities.Escursione;

/**
 * Session Bean implementation class EscursioneMgrBean
 */
@Stateless
public class EscursioneMgrBean implements EscursioneMgrBeanLocal {

	@PersistenceContext
    private EntityManager em;
	
	@Override
	public void aggiungi(EscursioneDTO escursione){
		Escursione nuovo = new Escursione(escursione);
		em.persist(nuovo);
	}
	
	@Override
	public void modifica(EscursioneDTO escursione, int indice){
		Query q = em.createNamedQuery("Escursione.MODIFICA");
		q.setParameter("id", indice);
		q.setParameter("nome", escursione.getNome());
		q.setParameter("descrizione", escursione.getDescrizione());
		q.setParameter("data", escursione.getData());
		q.setParameter("prezzo", escursione.getPrezzo());
		q.executeUpdate();	
	}
	
	private Escursione trova(int id) {
    	return em.find(Escursione.class, id);
    }
	
	public List<?> getEscursioni() {
    	return em.createNamedQuery("Escursione.FIND_ALL", Escursione.class).getResultList();
    }

	public void elimina(int indice){
		Query q = em.createNamedQuery("Escursione.CANCELLA");
		q.setParameter("id", indice);
		q.executeUpdate();
	}
	
	public EscursioneDTO getEscursioneDTO(int indice) {
		Escursione escursione = trova(indice);
		EscursioneDTO escursioneDTO = convertToDTO(escursione);
		return escursioneDTO;
	}

	 public static EscursioneDTO convertToDTO(Escursione escursione) {
		EscursioneDTO escursioneDTO = new EscursioneDTO();
		escursioneDTO.setIdEscursione(escursione.getIdEscursione());
		escursioneDTO.setNome(escursione.getNome());
		escursioneDTO.setDescrizione(escursione.getDescrizione());
		escursioneDTO.setData(escursione.getData());
		escursioneDTO.setPrezzo(escursione.getPrezzo());
		return escursioneDTO;
	}
	 
	 public List<EscursioneDTO> getListaEscursioniDTO(){
		 List<Escursione> escursioni= em.createNamedQuery("Escursione.FIND_ALL", Escursione.class).getResultList();
		 List<EscursioneDTO> escursioniDTO = new ArrayList<>();
		
		 for(Escursione e: escursioni){
			 escursioniDTO.add(convertToDTO(e));
		 }
		 return escursioniDTO;
	 }
	 
	 public static List<EscursioneDTO> convertToDTOLista(List<Escursione> escursioneList) {
			List<EscursioneDTO> escursioneDTOList = new ArrayList<EscursioneDTO>();
			for(Escursione e: escursioneList){
				escursioneDTOList.add(convertToDTO(e));
			}
			return escursioneDTOList;
	}
}
